import cv2

"""
    cv2.VideoCapture()
    类层次结构的基类，不接受任何参数，其实是创建一个实例对象
"""


# 中文乱码处理
def zh_ch(string):
    return string.encode("gbk").decode(errors="ignore")


i = 1

# 1. 打开摄像头/视频
cap = cv2.VideoCapture(0)  # 0 表示打开摄像头, 1 表示打开视频, 路径表示打开视频,摄像头捕获器

# 2. 先判断是否可用
if not cap.isOpened():
    print("摄像头打开失败")
    exit()

# 3. 使用摄像头捕获器cap，取捕获画面
# 连贯的一帧一帧的图像，其实就是视频
while True:
    # 返回值是一个元组（bool，mat/ndarray）
    # bool 表示是否成功取到画面
    # mat / ndarray 表示捕获到的画面
    ret, frame = cap.read()
    # 添加镜像翻转
    frame = cv2.flip(frame, 1)
    if not ret:
        print("摄像头取画面失败")
        break

    # 4. 成功捕获，显示画面
    cv2.imshow(zh_ch('摄像头'), frame)
    key = cv2.waitKey(1)

    # 5. 根据用户输入，判断是否退出
    if key == 27:
        print("用户按下了ESC键，退出")
        break
    elif key == 13:
        print("用户按下了回车键，保存图片")
        cv2.imwrite(f"{i}.png", frame)
        i += 1

# 6. 释放资源
cap.release()
